home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat5 / realtime.z / realtime
Encoding:
Text File  |  2002-10-03  |  26.6 KB  |  529 lines

  1.  
  2.  
  3.  
  4. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      _rrrr_eeee_aaaa_llll_tttt_iiii_mmmm_eeee, _ssss_cccc_hhhh_eeee_dddd_uuuu_llll_eeee_rrrr - introduction to real time and scheduler facilities
  10.  
  11. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  12.      The IRIX operating system provides a rich set of real-time programming
  13.      features that are collectively referred to as the REACT extensions.
  14.  
  15.      This document introduces the components of REACT, including:  bounded
  16.      response time, clocks, timers, signals, virtual memory control,
  17.      asynchronous I/O, POSIX threads, scheduling policies, realtime priority
  18.      band, processor isolation, process binding, interrupt redirection and
  19.      kernel thread placement.
  20.  
  21.      _BBBB_oooo_uuuu_nnnn_dddd_eeee_dddd _RRRR_eeee_ssss_pppp_oooo_nnnn_ssss_eeee _TTTT_iiii_mmmm_eeee
  22.  
  23.      A real-time system provides bounded and usually fast response to specific
  24.      external events, allowing applications to schedule a particular thread to
  25.      run within a specified time limit after the occurrence of an event.
  26.  
  27.      IRIX guarantees deterministic response of one millisecond on certain
  28.      uni-processor systems.  This real-time strategy guarantees the highest
  29.      priority thread will execute within one millisecond from the time it was
  30.      made runnable.
  31.  
  32.      On certain multi-processor machines (OCTANE, Origin200, Origin2000,
  33.      Onyx2, Origin300, Origin3000 series, and Onyx3), the one millisecond
  34.      bounded response time guarantee is controlled by the systune variable
  35.      _r_t_c_p_u_s.  rtcpus represents a threshold at which the scheduler
  36.      functionality that is required to meet this guarantee is enabled.  The
  37.      threshold is based on the number of physical cpus in the system.  If
  38.      rtcpus is set greater than or equal to the number of physical processors,
  39.      the bounded response guarantee is enabled.  If rtcpus is set below the
  40.      number of physical processors in the machine, the bounded response time
  41.      guarantee is NOT enabled.  The default value for rtcpus is 0, which means
  42.      that by default, the guarantee is not enabled.  In order to enable the
  43.      guarantee, rtcpus must be set equal to or greater than the number of cpus
  44.      in the system.  As an example, consider a four processor system.  If
  45.      rtcpus is set at a value between 0 and 3 (inclusive), the real-time
  46.      guarantee is not enabled.  If rtcpus is set at 4 or greater, the real-
  47.      time guarantee is enabled.  Note that enabling the real-time guarantee
  48.      may cause overall system performance to degrade.
  49.  
  50.      Real-time applications requiring a lower latency guarantee can use the
  51.      multi-processor real-time strategy to obtain a deterministic response of
  52.      50 microseconds on Origin3000, Origin300, and Onyx3 series machines and
  53.      100 microseconds on Origin2000, Origin200, and Onyx2 series machines.
  54.      This strategy typically consists of having one processor service
  55.      unpredictable loads, such as interrupts and system daemons, and the other
  56.      processor(s) servicing high-priority real-time jobs.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  71.  
  72.  
  73.  
  74.      _CCCC_llll_oooo_cccc_kkkk_ssss
  75.  
  76.      In order to perform event timing, IRIX provides the POSIX 1003.1b
  77.      _c_l_o_c_k__g_e_t_t_i_m_e(2) interface.  This interface can be used to access various
  78.      system clocks, including: the real-time clock, and a low overhead free
  79.      running hardware counter.
  80.  
  81.      _TTTT_iiii_mmmm_eeee_rrrr_ssss
  82.  
  83.      IRIX implements both BSD itimers and POSIX 1003.1b timers.  POSIX timers
  84.      are recommended for real-time application development, as they provide
  85.      the highest resolution and flexibility (see _t_i_m_e_r__c_r_e_a_t_e(3c)).
  86.  
  87.      Timer expiration interrupts are dispatched to IRIX interrupt threads for
  88.      handling.  The priority at which these threads are scheduled is
  89.      determined by the scheduling policy and priority of the thread which set
  90.      the timer:
  91.  
  92.           If the thread setting the timer is running with a timeshare
  93.           scheduling policy, then the associated interrupt thread will be
  94.           scheduled at realtime priority one.
  95.  
  96.           If the thread setting the timer is running with a real-time
  97.           scheduling policy, then the priority of the associated interrupt
  98.           thread will be the priority of the setting thread plus one. Priority
  99.           255, being the maximum real-time band priority, is an exception. If
  100.           the thread setting the timer is running at priority 255, then the
  101.           interrupt thread will also be scheduled at priority 255. Hence,
  102.           real-time applications depending on system services shouldn't use
  103.           priority 255 (see the _RRRR_eeee_aaaa_llll_----_TTTT_iiii_mmmm_eeee _PPPP_rrrr_iiii_oooo_rrrr_iiii_tttt_yyyy _BBBB_aaaa_nnnn_dddd Section below).
  104.  
  105.      Once the timer expires, the interrupt thread will be scheduled ahead of
  106.      the thread which set the timer.
  107.  
  108.      _SSSS_iiii_gggg_nnnn_aaaa_llll_ssss
  109.  
  110.      IRIX supports the full semantics of both BSD and AT&T signals.  In
  111.      addition IRIX has implemented the POSIX 1003.1b queued signals which
  112.      provide signal priorities and for queuing of signals such that exactly as
  113.      many signals are received as were sent (see _s_i_g_q_u_e_u_e(3)).  IRIX does not
  114.      guarantee the latency of signal delivery.
  115.  
  116.      _MMMM_eeee_mmmm_oooo_rrrr_yyyy _LLLL_oooo_cccc_kkkk_iiii_nnnn_gggg
  117.  
  118.      A real-time application can avoid the overhead of page fault processing
  119.      under IRIX by locking ranges of its text and data into memory.  The POSIX
  120.      _m_l_o_c_k_a_l_l(3c) system call can be used to lock down a process's entire
  121.      virtual address space.  Since it is not always desirable to lock down the
  122.      entire virtual address space, IRIX provides the following system calls to
  123.      lock and unlock a specified range of addresses in memory:
  124.      _m_p_i_n(2)/_m_u_n_p_i_n(2) and _m_l_o_c_k(3c)/_m_u_n_l_o_c_k(3c).  The major difference
  125.      between the two sets is that mpin/munpin maintains a per page lock
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  137.  
  138.  
  139.  
  140.      counter and mlock/munlock does not.  Developers should choose the set
  141.      that best suits their application and stick with it, as mixing the
  142.      interfaces may result in unexpected behavior.
  143.  
  144.      _AAAA_ssss_yyyy_nnnn_cccc_hhhh_rrrr_oooo_nnnn_oooo_uuuu_ssss _IIII_////_OOOO
  145.  
  146.      IRIX implements the POSIX 1003.1b interface to asynchronous I/O.  Using
  147.      this facility a programmer can queue a read or write request to a device
  148.      and optionally receive a queued signal when the request completes.  The
  149.      _r_e_a_d() or _w_r_i_t_e() call will return when the request is queued rather than
  150.      blocking the process pending completion of the I/O.  Optionally, process
  151.      priority can be used to establish the order in which queued requests are
  152.      completed.
  153.  
  154.      _PPPP_OOOO_SSSS_IIII_XXXX _TTTT_hhhh_rrrr_eeee_aaaa_dddd _SSSS_cccc_oooo_pppp_eeee
  155.  
  156.      POSIX threads (pthreads) supports both process and system scope threads.
  157.      System scope threads enable pthread applications to obtain predictable
  158.      scheduling behavior on a system level by using the kernel scheduler
  159.      directly, bypassing the user-level pthread scheduler.  For more
  160.      information about the pthread scheduling model, see _p_t_h_r_e_a_d(5).
  161.  
  162.      _TTTT_iiii_mmmm_eeee_ssss_hhhh_aaaa_rrrr_eeee _SSSS_cccc_hhhh_eeee_dddd_uuuu_llll_iiii_nnnn_gggg
  163.  
  164.      IRIX has an earnings-based scheduler for timeshare threads.  Processes
  165.      earn cpu microseconds of time base on their proportional share of the
  166.      system.  Their share of the system, and thus the rate at which they
  167.      accumulate earnings, is determined by their nice value.
  168.  
  169.      While timeshare threads are not priority scheduled, they do have an
  170.      independent timeshare priority band to represent _n_i_c_e(2) values.  This
  171.      band ranges from a low priority of 1 to a high priority of 40.  A change
  172.      in either the timeshare priority or the nice value results in a
  173.      corresponding change to the nice value or timeshare priority
  174.      respectively.
  175.  
  176.      Timeshare threads which are not the beneficiaries of priority inheritance
  177.      are never scheduled ahead of real-time threads.
  178.  
  179.      _BBBB_aaaa_tttt_cccc_hhhh _SSSS_cccc_hhhh_eeee_dddd_uuuu_llll_iiii_nnnn_gggg
  180.  
  181.      Refer to _m_i_s_e_r(5).
  182.  
  183.      _RRRR_eeee_aaaa_llll_----_TTTT_iiii_mmmm_eeee _SSSS_cccc_hhhh_eeee_dddd_uuuu_llll_iiii_nnnn_gggg
  184.  
  185.      IRIX supports the POSIX 1003.1b real-time scheduler interfaces,
  186.      including:  _s_c_h_e_d__s_e_t_s_c_h_e_d_u_l_e_r(2) and _s_c_h_e_d__s_e_t_p_a_r_a_m(2).
  187.  
  188.      These interfaces provide privileged applications with the control
  189.      necessary for managing the cycles of the system processor(s).  Real-time
  190.      scheduling policies, such as round-robin and first-in-first-out, may be
  191.      selected along with a real-time priority.
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  203.  
  204.  
  205.  
  206.      _RRRR_eeee_aaaa_llll_tttt_iiii_mmmm_eeee _PPPP_rrrr_iiii_oooo_rrrr_iiii_tttt_yyyy _BBBB_aaaa_nnnn_dddd
  207.  
  208.      A real-time thread may select one of a range of 256 priorities (0-255) in
  209.      the real-time priority band, using POSIX interfaces _s_c_h_e_d__s_e_t_p_a_r_a_m() or
  210.      _s_c_h_e_d__s_e_t_s_c_h_e_d_u_l_e_r().
  211.  
  212.      The higher the numeric value of the priority the more important the
  213.      thread.
  214.  
  215.      Developers must consider the needs of the application and how it should
  216.      interact with the rest of the system, before selecting a real-time
  217.      priority.  To aid in this decision, the priorities of the system threads
  218.      should be considered.
  219.  
  220.      IRIX manages system threads to handle kernel tasks, such as paging and
  221.      interrupts. System daemon threads execute between priority range _9_0 _a_n_d
  222.      _1_0_9 inclusive, and system device driver interrupt threads execute between
  223.      priority range _2_0_0 _a_n_d _2_3_9 inclusive (see the following section for more
  224.      information about interrupt threads).
  225.  
  226.      An application may set the priorities of its threads above that of the
  227.      system threads, but this may effect the behavior of the system. For
  228.      example, if the disk interrupt thread is blocked by higher priority user
  229.      thread, disk data access will be delayed, pending completion of the user
  230.      thread.
  231.  
  232.      Setting the priorities of application threads within or above the system
  233.      thread ranges requires an advanced understanding of IRIX system threads
  234.      and their priorities.  The priorities of the IRIX system threads may be
  235.      found in /_v_a_r/_s_y_s_g_e_n/_m_t_u_n_e/_k_e_r_n_e_l.  If necessary, these defaults may be
  236.      changed using _s_y_s_t_u_n_e(1M), although this is not recommended for most
  237.      users.
  238.  
  239.      Many soft real-time applications simply need to execute ahead of
  240.      timeshare applications, in which case priority range 0 through and
  241.      including 89 is best suited.  Since timeshare applications are not
  242.      priority scheduled, a thread running at the lowest real-time priority (0)
  243.      will still execute ahead of all timeshare applications.  Note, however,
  244.      that at times the operating system briefly promotes timeshare threads
  245.      into the realtime band to handle timeouts, and avoid priority inversion.
  246.      In these special cases, the promoted thread's real-time priority is never
  247.      boosted higher than 1.
  248.  
  249.      Applications cannot depend on system services if they are running ahead
  250.      of the system, without observing the system responsiveness timing
  251.      guidelines below.
  252.  
  253.      Interactive real-time applications (such as digital media) need low
  254.      latency response times from the operating system, but changing interrupt
  255.      thread behavior is undesirable. In this case, priority range 110 through
  256.      and including 199 is best suited, allowing execution ahead of system
  257.      daemons but behind interrupt threads.  Applications in this range are
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  269.  
  270.  
  271.  
  272.      typically cooperating with a device driver, in which case, the correct
  273.      priority for the application is the priority of the device driver
  274.      interrupt thread minus 50 (see the following section). If the application
  275.      is multi-threaded, and multiple priorities are warranted, then the
  276.      priorities of the threads should be no greater than the priority of the
  277.      device driver interrupt thread minus 50. Note that threads running at a
  278.      higher priority than system daemon threads should never run for more than
  279.      a few milliseconds at a time, in order to preserve system responsiveness.
  280.  
  281.      Hard real-time applications may use priorities 240 through and including
  282.      254 for the most deterministic behavior and the lowest latencies.
  283.      However, if a thread running at this priority ever gets into a state
  284.      where it is using 100% of the processor, the system may become completely
  285.      unresponsive.  Threads running at a higher priority than the interrupt
  286.      threads should never run for more that a few hundred microseconds at a
  287.      time, in order to preserve system responsiveness.
  288.  
  289.      Priority 255, the highest real-time priority, should not be used by
  290.      applications.  This priority is reserved for system use in order to
  291.      handle timers for urgent real-time applications, and kernel debugger
  292.      interrupts.  Applications executing at this priority run the risk of
  293.      hanging the system.
  294.  
  295.      The proprietary IRIX interface for selecting a real-time priority,
  296.      _s_c_h_e_d_c_t_l(), is still supported for binary compatibility, but it is no
  297.      longer the interface of choice.  The non-degrading real-time priority
  298.      range of schedctl() is re-mapped onto the POSIX real-time priority band
  299.      as priorities 90 through 118 as follows: 39=90, 38=110, 37=111, 36=112,
  300.      35=113, 34=114, etc..  Note that the large gap between the first two
  301.      priorities preserves the scheduling semantics of schedctl() threads and
  302.      system daemons.
  303.  
  304.      Real-time users are encouraged to use tools such as par(1) and
  305.      irixview(1) to observe the actual priorities and dynamic behaviors of all
  306.      threads on a running system.
  307.  
  308.      _DDDD_eeee_vvvv_iiii_cccc_eeee _DDDD_rrrr_iiii_vvvv_eeee_rrrr _IIII_nnnn_tttt_eeee_rrrr_rrrr_uuuu_pppp_tttt _TTTT_hhhh_rrrr_eeee_aaaa_dddd _PPPP_rrrr_iiii_oooo_rrrr_iiii_tttt_iiii_eeee_ssss
  309.  
  310.      As of IRIX 6.4, device drivers employ interrupt threads to handle device
  311.      interrupts. Interrupt threads have default priorities in the range 200
  312.      through and including 239.
  313.  
  314.      To make selecting an appropriate priority for an interrupt thread easier,
  315.      IRIX defines device classes including: audio, video, network, disk,
  316.      serial, parallel, tape, external.  Each device class has a priority
  317.      assigned to it.  A complete listing of device classes, and their default
  318.      priorities, can be found in /_v_a_r/_s_y_s_g_e_n/_m_t_u_n_e/_k_e_r_n_e_l.
  319.  
  320.      For example, the value of _n_e_t_w_o_r_k__i_n_t_r__p_r_i defines the interrupt thread
  321.      priority of all network class devices.
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  335.  
  336.  
  337.  
  338.      A device driver may set the priority of its interrupt thread to one of
  339.      the defined classes, by using the class directive in its driver
  340.      configuration file (located in the /var/sysgen/master.d directory).
  341.  
  342.      For example, /var/sysgen/master.d/if_ef includes the directive
  343.  
  344.           +thread_class  network
  345.  
  346.      which means that the value of the systune(1M) variable _n_e_t_w_o_r_k__i_n_t_r__p_r_i
  347.      will be used for the interrupt thread priority of this device.
  348.  
  349.      Devices whose class cannot be determined use the value of the variable
  350.      _d_e_f_a_u_l_t__i_n_t_r__p_r_i:
  351.  
  352.           +thread_class  default
  353.  
  354.      The default priority of each device class may be changed using the
  355.      appropriate systune(1M) variable in /_v_a_r/_s_y_s_g_e_n/_m_t_u_n_e/_k_e_r_n_e_l.
  356.  
  357.      The thread_class value may be overridden for a particular driver by
  358.      adding the _t_h_r_e_a_d__p_r_i_o_r_i_t_y directive to the driver description file.  For
  359.      example:
  360.  
  361.           +thread_priority    205
  362.  
  363.      On systems supporting the hardware graph, both of these values may be
  364.      overridden for a particular device by using the DEVICE_ADMIN directive
  365.      with the INTR_SWLEVEL attribute in the /var/sysgen/system/irix.sm file
  366.      (q.v. for an example of this usage).
  367.  
  368.      _PPPP_rrrr_oooo_cccc_eeee_ssss_ssss_oooo_rrrr _CCCC_oooo_nnnn_tttt_rrrr_oooo_llll
  369.  
  370.      Using the _s_y_s_m_p() call or the _m_p_a_d_m_i_n and _r_u_n_o_n commands a programmer may
  371.      control the distribution of processes among the processors in a real-time
  372.      system.  For instance, it is possible to bind a particular process onto a
  373.      processor and conversely, it is possible to restrict a processor to only
  374.      run those processes that are explicitly bound to it.  This makes it
  375.      possible to dedicate one or more processors to particular processes.
  376.  
  377.      Nominally, when IRIX is running in a multiprocessor certain system
  378.      services require synchronization of all processors in the complex.  This
  379.      is mainly done to synchronize the instruction caches and to synchronize
  380.      the virtual to physical translation caches or tlbs.  In order to reduce
  381.      the worst case dispatch latency a processor can be _i_s_o_l_a_t_e_d using the
  382.      _s_y_s_m_p() call.  This allows a process some control over when these
  383.      synchronizing events take place.  If the process never requests system
  384.      services then there is no need to synchronize.  If the process is sharing
  385.      address space with other processes through use of either _s_p_r_o_c() or
  386.      _s_p_r_o_c_s_p() then members of the share group should also avoid operations
  387.      that would require IRIX to synchronize with the isolated processor.
  388.      These include operations that explicitly flush caches, expand address
  389.      space across 4 megabyte boundaries, release address space or change
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  401.  
  402.  
  403.  
  404.      address space protections.  Creation of new share group members through
  405.      the use of _s_p_r_o_c() requires the creation of a stack area which may result
  406.      in a synchronization event.  Use of the _s_p_r_o_c_s_p() interface specifying a
  407.      stack in section of locked memory is recommended.
  408.  
  409.      _s_y_s_m_p() can also be used to turn off normal IRIX clock processing on a
  410.      particular processor and thus normal IRIX time slicing will not preempt
  411.      the running process.  Thus, if a processor is isolated, no devices are
  412.      configured onto that processor, the clock service is disabled, the
  413.      application process is restricted to the isolated processor and its
  414.      virtual space is locked in memory then a user can achieve a fast bounded
  415.      response time to an external event.
  416.  
  417.      _FFFF_rrrr_aaaa_mmmm_eeee _RRRR_aaaa_tttt_eeee _SSSS_cccc_hhhh_eeee_dddd_uuuu_llll_eeee_rrrr
  418.  
  419.      The Frame Rate Scheduler (FRS) is part of SGI's REACT/Pro product and is
  420.      a special scheduling mechanism.  It allows real-time processes and
  421.      threads to have CPUs run them for specific amounts of time, in a specific
  422.      order.  The FRS is very useful for real-time applications that need a
  423.      high degree of control over the CPU on which they are running, and which
  424.      need to be scheduled at a specific frequency.
  425.  
  426.       _CCCC_PPPP_UUUU_ssss_eeee_tttt_ssss
  427.  
  428.      A cpuset is a named set of CPUs, which may be defined to be restricted or
  429.      open.  A restricted cpuset only allows processes that are members of the
  430.      cpuset to run on the set of CPUs.  An open cpuset allows any process to
  431.      run on its cpus, but a process that is a member of the cpuset can only
  432.      run on the CPUs belonging to the cpuset.
  433.  
  434.      Cpusets are useful for real-time applications because as sets of
  435.      restricted CPUs they eliminate the interference caused by other processes
  436.      running on the same CPU, while being more convenient to manage then
  437.      individual restricted CPUs.
  438.  
  439.      _IIII_nnnn_tttt_eeee_rrrr_rrrr_uuuu_pppp_tttt _RRRR_eeee_dddd_iiii_rrrr_eeee_cccc_tttt_iiii_oooo_nnnn
  440.  
  441.      When the multi-processor real-time strategy is being used, it is often
  442.      necessary to redirect unwanted PCI and VME interrupts away from the
  443.      real-time processors.
  444.  
  445.      Control over which device interrupts are sent to which processor can be
  446.      achieved by adding DEVICE_ADMIN directives to the
  447.      /_v_a_r/_s_y_s_g_e_n/_s_y_s_t_e_m/_i_r_i_x._s_m file.
  448.  
  449.      The NOINTR directive may also be used to guarantee that no interrupts are
  450.      randomly assigned for handling by the real-time processor.  After _i_r_i_x._s_m
  451.      is modified _l_b_o_o_t should be run to reconfigure the system.
  452.  
  453.      _KKKK_eeee_rrrr_nnnn_eeee_llll _TTTT_hhhh_rrrr_eeee_aaaa_dddd _PPPP_llll_aaaa_cccc_eeee_mmmm_eeee_nnnn_tttt
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))                                                        rrrreeeeaaaallllttttiiiimmmmeeee((((5555))))
  467.  
  468.  
  469.  
  470.      In some situations kernel threads need to run on specific processors or
  471.      with other special behavior just like user threads.  The XThread Control
  472.      Interface (XTCI) was added in IRIX 6.5.16 to control these special
  473.      behaviors.  Users may add XTHREAD entries in the
  474.      /_v_a_r/_s_y_s_g_e_n/_s_y_s_t_e_m/_i_r_i_x._s_m file.  Kernel theads not mentioned operate
  475.      with default behavior. After _i_r_i_x._s_m is modified _l_b_o_o_t should be run to
  476.      reconfigure the system.
  477.  
  478.      To preserve compatability, XTCI entries will defer to the legacy
  479.      /_v_a_r/_s_y_s_g_e_n/_m_a_s_t_e_r._d/_s_g_i interface in the event that conflicting entries
  480.      are found.  As in the _m_a_s_t_e_r._d/_s_g_i interface, system threads can also be
  481.      specified but they may later change their behavior whereas interrupt
  482.      threads must adhere throughout their lifetime.
  483.  
  484.      Specific interface entries include:
  485.  
  486.      XTHREAD name[*] [BOOT] [FLOAT] [STACK s] [PRI p] [CPU m...n]
  487.  
  488.      XTHREAD - Any line beginning with XTHREAD will be for controlling kernel
  489.      threads. All the information must be on the same line.
  490.  
  491.      name[*] - Any thread with a name equal to "name" will be affected by the
  492.      following directives.  If [*] follows, any thread whose name begins with
  493.      "name" will be affected.
  494.  
  495.      BOOT    - The thread will stay within the boot cpuset if one exists.
  496.  
  497.      FLOAT   - The thread will never be bound to a cpu.  A thread cannot be
  498.      both FLOAT & BIND.
  499.  
  500.      STACK   - The number following STACK will specify the starting thread
  501.      stack size.
  502.  
  503.      PRI     - The number following PRI wll specify the starting thread cpu
  504.      scheduling priority.
  505.  
  506.      CPU     - The numbers following CPU will be a list of cpus to attempt to
  507.      place the thread on if possible.  Threads that cannot be placed on their
  508.      CPU list will be considered FLOAT.  This is comparable to the _s_y_s_m_p()
  509.      MP_MUSTRUN command for user threads.
  510.  
  511. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  512.      lboot(1), mpadmin(1), runon(1), systune(1M), mlockall(3c), mpin(2),
  513.      munpin(2), plock(2), sched_setparam(2), sched_setscheduler(2), sproc(2),
  514.      sysmp(2), syssgi(2), aio_error(3), aio_read(3), aio_return(3),
  515.      aio_write(3), lio_listio(3), system(4), signal(5), sigqueue(3)
  516.      timer_create(3c), pthread(3p) nice(1), renice(1m), frs(3), cpuset(5)
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.